2

正如我在标题中提到的,我遇到了土耳其字符的问题。我在 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 相信我发送的字符串比它想象的要大

4

2 回答 2

4

我假设您从 PHP 发送这些查询。我可以这么说,因为你是我。

显然 'utf8_turkish_ci' 排序规则可以解码乱码 utf8 代码,但不能解码纯土耳其字符。更改 php 文件的编码header('Content-Type: text/html; charset=utf8');可以解决这个问题。

于 2012-06-26T22:17:32.123 回答
0

我一直在使用 notepad++ 文本编辑器并且遇到了同样的问题。(尽管上面的解决方案)在编码选项卡上,有一个选择为 UTF-8 的代码,我选择了它并保存了文件。在我将代码发送到服务器后,它可以工作了:)

于 2015-02-10T21:52:58.477 回答