В mysql, когда пользователь пытается добавить объект char, содержащий заглавные буквы турецкого я, выдается ошибка. Я искал причину и узнал, что турецкий I смешивается с нижнетурецким ı и i в нижнем регистре. Есть ли способ использовать нижний турецкий ı на mysql? Мой сервер mysql - utf8_general и сопоставляется с utf8_general_ci. Может windows-1254 может помочь?
Подводя итог, вы не должны использовать верхний турецкий I ни в одном из ваших кодов. Это противоречит тому, что вы только что сказали. Windows 1254, безусловно, помогает решить проблему конфликта.
Я бы не стал использовать «общие» сопоставления в MySQL. Они старые и простодушные.
Какую версию MySQL вы используете? Для более старых версий я бы использовал utf8_unicode_520_ci или utf8_turkish_ci.
Из-за «без точки i» (ı
) «правильно» работает только турецкое сочетание. (Хорошо, я не эксперт в том, как без точек я должен сравнивать.)
Глядя на http://mysql.rjweb.org/utf8_collations.html, я вижу следующие интересные строки:
utf8_turkish_ci
I=ı Ħ=ħ i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ ij=IJ=ij iz J=j=j́=Ĵ=ĵ jz
utf8_unicode_520_ci
I=i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ ij=IJ=ij iz ı J=j=j́=Ĵ=ĵ jz
utf8_general_ci
I=i=Ì=Í=Î=Ï=ì=í=î=ï=Ĩ=ĩ=Ī=ī=Ĭ=ĭ=Į=į=İ=ı ij iz J=j=Ĵ=ĵ jz j́
Мне говорят, что строчная буква i без точки сравнивается с заглавной буквой I без точки и перед H! Но для большинства других сопоставлений строчная буква i без точки сравнивается между всеми буквами I и J.
Интересно, что пунктирная İ
в верхнем регистре сравнивается с большинством I в большинстве сопоставлений.
При этом пунктирные и нет, верхние и нижние я сравниваю равными в utf8_general_ci.
Я не знаю, что происходит в windows-1254, но будьте осторожны.
Когда вы доберетесь до нового значения по умолчанию (utf8mb4), будет еще одна сортировка. Я не знаю, что с этим делать. Кажется, что некоторые акценты сопоставляются после некоторых других:
utf8mb4_tr_0900_ai_ci
I=Ì=Í=Î=Ï=Ĩ=Ī=Ĭ=Į=ı i=ì=í=î=ï=ĩ=ī=ĭ=į=İ ij=IJ=ij iz J=j=j́=Ĵ=ĵ jz
Большое спасибо за ответ, я все учту. Я использую mysql 8.x. Также этого случая не произошло с другими моими серверами mysql. Так что я предполагаю, что эта ситуация возникает в последних версиях
Если возможно, сделайте SHOW CREATE TABLE
на обоих серверах — может быть разница, вызванная переходом на 8.0. Значения по умолчанию изменились; Я не могу придумать, как бы это изменило, скажем, COLLATION
.
Я не могу получить доступ к консоли прямо сейчас. Я сообщу вам, как только получу логи. Спасибо большое за твою помощь
Я использовал windows1254, и это работает. Спасибо. Также windows1254 работает с арабскими буквами