yin*_*jia 5 mysql unicode utf8mb4
我在MySql中保存unicode字符时遇到问题.
最初我的数据库字符集设置为latin1,unicode字符串保存为引号.在做了一些研究后,我添加了以下几行my.cnf
:
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)
并执行查询:
ALTER DATABASE <my_database> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
Run Code Online (Sandbox Code Playgroud)
重启mysql后,出现错误:
"org.springframework.jdbc.UncategorizedSQLException:Hibernate操作:无法执行JDBC批量更新;未分类的SQL的SQLException ...不正确的字符串值:'\ xD0\xBA\xD1\x81\xD0\xB5 ...'用于列' first_name'在第1行"
查询mysql> show variables like 'char%'
; 返回结果:
Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/
Run Code Online (Sandbox Code Playgroud)
和查询mysql> show create database <my_database>
给出:
| Database | Create Database |
+-----------+-----------------------------------------------------------------------+
| my_database | CREATE DATABASE `my_database` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
Run Code Online (Sandbox Code Playgroud)
我知道这个问题很多时候都得到了回答,但是我尝试了在谷歌找到的所有东西,但仍无法修复它.任何帮助表示赞赏!
UPDATE
在查询SHOW CREATE TABLE之后,我看到表的DEFAULT CHARSET是latin1.
我改变了表ALTER TABLE my_table CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
;
之后,每列都将CHARACTER SET设置为latin1,而查询结果末尾的DEFAULT CHARSET为utf8mb4
更改列后ALTER TABLE my_table MODIFY my_column VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
,我在保存值时消除了错误,但它返回保存带有问号的字符串.还是没有发现问题
确保在插入数据库时具有正确的编码。将以下内容添加到您的 jdbc URL
?useUnicode=yes&characterEncoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
所以你的最终 URL 看起来像这样
jdbc:mysql://HOSTNAME:PORT/DATABASE_NAME?useUnicode=yes&characterEncoding=UTF-8
Run Code Online (Sandbox Code Playgroud)确保使用utf8 字符集和适当的排序规则(如utf8_general_ci)创建表
所以2天后我在评论和其他帖子的帮助下弄清楚了.
unicode的问题分为2个级别:1)如何在MySql中保存2)Freemarker如何显示值
这些是我解决问题的步骤:
第1步:将以下行添加到my.cnf文件中:
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)
第2步:运行查询
ALTER TABLE my_table MODIFY my_column VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
对于需要接受utf-8的每一列.修复了MySql编码.注意:更改整个数据库或表似乎不起作用.
第3步:将以下属性添加到ContentNegotiatingViewResolver
bean:
<beanclass="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
问题解决了.
归档时间: |
|
查看次数: |
9194 次 |
最近记录: |