我有一个网站,我意识到当您将某些字符(*,' " - _
)从 Microsoft Word 等特定应用程序复制到我网站上的搜索框中时,它会返回此错误:
ERROR org.hibernate.util.JDBCExceptionReporter - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
所以我去检查我的数据库,我想看看数据库是否使用 UTF-8。
mysql> SHOW VARIABLES LIKE '%character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
如您所见,数据库正在使用latin1
,我想将其设置为使用utf8
. 因此,首先,我在Centos 6.2
服务器上,文件my.cnf
文件驻留在/etc/my.cnf
其中,文件如下[mysqld]
:
[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
init_connect ='SET NAMES utf8'
character_set_server = utf8
collation_server = utf8_general_ci
PS我并不担心该[client]
部分,因为它表明它使用utf8
低于character_set_client
.
问题:
虽然我试图在我my.cnf
的文件中设置服务器(并关闭文件,关闭我的 tomcat 并重新启动我的 tomcat)。什么都没有改变。当我运行我显示的第一个查询时,它仍然显示character_set_server
仍在使用latin1