日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库的编码问题

發布時間:2024/9/30 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库的编码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 問題

幾天碼代碼的時候,發現往表中插入漢字的時候報如下錯誤

java.lang.RuntimeException: java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE6\x98\xAF...' for column 'name' at row 1 Query: update account set name=?,money=? where id = ? Parameters: [我是A, 1500.0, 1]

報運行時異常,java的SQL異常:不正確的字符串值。
打開數據發現亂碼

mysql> select * from account; +----+------+-------+ | id | name | money | +----+------+-------+ | 1 | ??A | 100 | | 2 | ??B | 100 | | 3 | ccc | 500 | | 4 | ddd | 0 | | 5 | eee | 1200 | +----+------+-------+ 5 rows in set (0.00 sec)

2 找出問題

查看數據庫的編碼格式

mysql> show create database test; +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec)

發現數據庫test的默認編碼格式為utf8,

mysql> show create table account; +---------+------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+------------------------------------------------------------------------------------------------+ | account | CREATE TABLE `account` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`money` float(255,0) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 | +---------+------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

發現表的編碼格式為latin1
網上找了一個命令alter table 表名稱 convert to character set utf8;
使用后發現,標的默認編碼是改過來了。字段還是有問題。

mysql> alter table `account` convert to character set utf8; Query OK, 5 rows affected (0.15 sec) Records: 5 Duplicates: 0 Warnings: 0mysql> show create table account; +---------+-------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+-------------------------------------------------------------------------------------------------+ | account | CREATE TABLE `account` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`money` float(255,0) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 | +---------+-------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

字段有問題

mysql> select * from account; +----+------+-------+ | id | name | money | +----+------+-------+ | 1 | AAA | 1500 | | 2 | ??B | 100 | | 3 | ccc | 500 | | 4 | ddd | 0 | | 5 | eee | 1200 | +----+------+-------+ 5 rows in set (0.00 sec)

再往表中插入漢字,發現可以了。

mysql> UPDATE account SET `name`='我是A', money=100 WHERE id=1mysql> select * from account; +----+-------+-------+ | id | name | money | +----+-------+-------+ | 1 | 我是A | 100 | | 2 | ??B | 100 | | 3 | ccc | 500 | | 4 | ddd | 0 | | 5 | eee | 1200 | +----+-------+-------+ 5 rows in set (0.00 sec)

可以發現:
修改表的編碼格式時就可以了,但是第二個是已經插入進去了,已經是亂碼了,無法改變了。

總結

以上是生活随笔為你收集整理的数据库的编码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。