正如我在标题中提到的那样,我遇到了土耳其人的问题。我在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'到处都是'你好'。
我的计划中的每个校对都是utf8_turkish_ci。 编辑:我注意到我的问题不包括问题。所以就是这样:我怎样才能让MySQL相信我发送的字符串比它想象的要大
答案 0 :(得分:3)
我假设你是从PHP发送这些查询。我可以这么说,因为你是我。
显然'utf8_turkish_ci'整理可以解码乱码的utf8代码,但不能解释普通的土耳其字符。通过header('Content-Type: text/html; charset=utf8');
更改php文件的编码可以解决这个问题。
答案 1 :(得分:0)
我一直在使用notepad ++文本编辑器并遇到同样的问题。 (尽管上层解决方案) 在编码选项卡上,有一个选择作为UTF-8的代码,我选择它并保存文件。在我将代码发送到服务器后,它可以工作:)