美文网首页
中文无法插入mariadb数据库解决办法

中文无法插入mariadb数据库解决办法

作者: Jaxer | 来源:发表于2019-03-30 16:37 被阅读0次

    最近我在用mybatis插入一条数据到mariadb时,报了一个不正确的字符串的错误,服务器显示500错误,从控制台打印相关的提交数据都比较正常,试了英文没有问题,那么问题就出现在了字符集了。


    错误截图

    错误信息主要如下:

    ### Error updating database. Cause: java.sql.SQLDataException: (conn=329) Incorrect string value: '\xE4\xB9\xB0:15...' for column 'note' at row 1
    ### The error may exist in com/xiao/shopping/demo/dao/PurchaseRecordDao.java (best guess)
    ### The error may involve com.xiao.shopping.demo.dao.PurchaseRecordDao.insertPurchaseRecord-Inline
    ### The error occurred while setting parameters
    ### SQL: insert into T_PURCHASE_RECORD( id,user_id,product_id,price,quantity,sum,purchase_date ,note ) values ( ?,?,?,?,?,?,now(),? )
    ### Cause: java.sql.SQLDataException: (conn=329) Incorrect string value: '\xE4\xB9\xB0:15...' for column 'note' at row 1
    ; (conn=329) Incorrect string value: '\xE4\xB9\xB0:15...' for column 'note' at row 1; nested exception is java.sql.SQLDataException: (conn=329) Incorrect string value: '\xE4\xB9\xB0:15...' for column 'note' at row 1] with root cause

    后面上了mariaDB官网看,原来mariadb默认的字符集是latin1,而服务器字符集为utf-8,当使用中文写入数据库时,字符集不正确,便出错了。官网原话如下:

    In MariaDB, the default character set is latin1, and the default collation is latin1_swedish_ci
    When changing a character set and not specifying a collation, the default collation for the new character set is always used.

    我们使用一条命令查看表的字符集

    show create table [表格名称]
    show create database [数据库名称]

    查看数据库后,确实是这样。

    数据库表字符集打印结果
    数据库字符集

    我们可以使用下面这条SQL语句更改数据库表和数据库的字符集

    ALTER TABLE shopping.T_PURCHASE_RECORD
    MODIFY COLUMN note varchar(512) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL;
    ALTER DATABASE shopping COLLATE = 'utf8_unicode_ci', CHARACTER='utf8';

    修改字符集后重新post数据

    修改后我们字符集的问题就解决了。不过,虽然我们使用的数据库字符集正确了,如果没有修改数据库的设置,我们再创建一张表或者数据库,又回遇到这个坑爹的问题。为了一劳永逸,我们直接修改数据库配置。

    linux下运行vim命令操作my.cnf配置文件
    sudo vi /etc/my.cnf
    添加一行
    [mysqld]
    character-set-server = utf8
    collation-server = utf8_unicode_ci

    my.cnf配置文件

    相关文章

      网友评论

          本文标题:中文无法插入mariadb数据库解决办法

          本文链接:https://www.haomeiwen.com/subject/tsxmvqtx.html