У меня проблемы с турецкими персонажами, как я упоминал в названии. Я создал функцию MySQL:
DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `ilgiAlaniFunc`( idKullanici INT, ilgi_alani_ismi varchar(255) CHARSET utf8 COLLATE utf8_turkish_ci ) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_turkish_ci READS SQL DATA DETERMINISTIC BEGIN -- Function logic here DECLARE ret int DEFAULT -1; select id Into ret from ilgi_alanlari where ilgi_alani_adi=ilgi_alani_ismi limit 1; IF(ret = -1) then INSERT INTO ilgi_alanlari(ilgi_alani_adi) values (ilgi_alani_ismi); SELECT last_insert_id() into ret; END IF; insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id) values (idKullanici, ret); RETURN ret; END
Это дамп запросов, которые я запускаю:
111 Connect root@localhost on anketsis_main 111 Query select ilgiAlaniFunc(43,'kıvılcım') 111 Query select id Into ret from ilgi_alanlari where ilgi_alani_adi= NAME_CONST('ilgi_alani_ismi',_utf8'k' COLLATE 'utf8_turkish_ci') limit 1 111 Query insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id) values ( NAME_CONST('idKullanici',43), NAME_CONST('ret',54))
Здесь вы можете видеть, что «kıvılcım» превращается в «k». После первого турецкого символа MySQL после этого стирает все.
И вот правильный сброс:
120 Query select ilgiAlaniFunc(44,'Hello') 120 Query select id Into ret from ilgi_alanlari where ilgi_alani_adi= NAME_CONST('ilgi_alani_ismi',_utf8'Hello' COLLATE 'utf8_turkish_ci') limit 1 120 Query INSERT INTO ilgi_alanlari(ilgi_alani_adi) values ( NAME_CONST('ilgi_alani_ismi',_utf8'Hello' COLLATE 'utf8_turkish_ci')) 120 Query SELECT last_insert_id() into ret 120 Query insert into kullanici_ilgi_alani(kullanici_id, ilgi_alani_id) values ( NAME_CONST('idKullanici',44), NAME_CONST('ret',56))
Как вы видите, «Hello» – это «Hello» повсюду.
В моей схеме каждая сортировка – utf8_turkish_ci. Изменить: я заметил, что мой вопрос не включает в себя вопрос. Итак, вот он: как я могу заставить MySQL полагать, что я отправляю строки больше, чем думает
Я предполагаю, что вы отправляете эти запросы с PHP. Я могу сказать это, потому что ты – я.
По-видимому, «utf8_turkish_ci» сортировка может декодировать gibberish utf8 коды, но не простые турецкие символы. Изменение кодировок в файлах php по header('Content-Type: text/html; charset=utf8');
вы можете решить эту проблему.
Я использовал текстовый редактор notepad ++ и имел ту же проблему. (несмотря на верхнее решение) На вкладке кодирования есть выбор как код с UTF-8, я выбрал его и сохранил файл. После того, как я отправил код на сервер, он работает 🙂