我想在数据库中搜索用户输入。数据库排序规则为latin1_swedish_ci
。我不想更改它,我可以将用户输入的utf-8
更改为latin1_swedish_ci
吗?
编辑:
我有两种方法。
方法1:我导入并使用了默认排序规则latin1_swedish_ci
和字符集latin1
。那我有
在这里,我可以像SELECT * FROM dict WHERE english_word = '$_value'
一样进行查询,并根据需要在浏览器中获取包括malayalam_definition在内的所有列的值。但是问题是我无法像SELECT * FROM dict WHERE malayalam_definition = '$_value'
这样查询。它不返回任何结果。
方法2:我将排序规则更改为utf8_unicode_ci
,并将字符集更改为utf8
。然后在mysql中获得所需的值,例如
在这里,当我像SELECT * FROM dict WHERE english_word = '$_value'
在浏览器中查询 时,会在malayalam_definition
值中查询到问号,例如
SHOW VARIABLES LIKE 'character\_set\_%';
的结果
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.00 sec)
我需要更改character_set_server
,然后怎么做?
答案 0 :(得分:0)
首先,“数据库排序规则”仅是默认设置。真正的问题是您感兴趣的列的CHARACTER SET
是什么。
然后,您的 client 中的字节是多少?它们被编码为latin1
吗?还是utf8
?无论哪种情况,请告诉MySQL即将发生的事情。优选地,这在连接参数中完成。 (您的客户端语言是什么?)或者,根据客户端编码使用SET NAMES latin1
或SET NAMES utf8
。
现在,MySQL将在INSERT
和SELECT
上执行的操作...它将{em>将的编码从客户端的编码转换为列的编码,就像您执行{{ 1}}。无需采取进一步措施即可实现这一目标。
类似地,MySQL将在INSERT
期间进行另一种转换。
(当然,如果列和客户端使用相同的编码,则无需“转换”。)
您的问题提到“归类”。到目前为止,我只谈论了SELECT
,也称为“编码”。与此相反,两个字符串的排序和比较-这是CHARACTER SETs
。
对于COLLATION
CHARACTER SET
,默认latin1
为COLLATION
。
对于latin1_swedish_ci
CHARACTER SET
,默认utf8
为COLLATION
。
有几种不同的“排序规则”可以处理德语或土耳其语或西班牙语或(等)顺序的怪癖。
请说明为什么,您尝试按照自己的意愿去做。 错误有很多方法可以实现,所以我不想给您一个utf8_general_ci
语句-这可能会使真实变得更糟目标。
最好使用utf8mb4而不是utf8。外界指的是ALTER
;这等效于MySQL的UTF-8
。
编辑(在OP进行编辑之后)
第一个屏幕截图显示“ Mojibake”。另一个屏幕截图显示了问号。每个原因都在Trouble with UTF-8 characters; what I see is not what I stored
中进行了介绍