我知道表和数据库的语言有很多设置.
我已经创建了数据库.我相信当我创建它时,它是默认/ LATIN.我想改变一切 - 我的意思是...... 表和数据库,改为UTF-8.
我怎样才能做到这一点?谢谢.
我们在服务器2003上运行了一个旧的5.1 Mysql服务器.最近我们转向使用Mysql 5.6和server 2008的新环境.现在在新服务器上,当插入像'Ã'这样的特殊字符时,我们不断出错.
现在我检查了源编码,它是UTF-8.但旧的Mysql服务器配置为latin1(服务器/表/冒号)与排序规则latin_swedish_ci,我们没有在旧环境中收到任何错误.
现在我做了一些测试,因为我们没有在新环境中生活.我已经尝试将所有表设置为表/冒号以及latin1.在这两种情况下,我都会遇到这些错误.
我注意到在旧服务器上,服务器默认的字符集是latin1,在新服务器上是utf-8.这可能是问题吗?我发现这很奇怪,因为源是utf-8.
是否有一些选项可以处理这个可以在旧环境中打开?我不确定是否存在类似的东西.我确实比较了mysql管理工具中的设置,除了默认的字符集外,它看起来是一样的.
编辑:
SHOW VARIABLES喜欢'char%';
旧服务器:
+--------------------------+-----------------------------------------------+
| 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 |
Run Code Online (Sandbox Code Playgroud)
新服务器:
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | utf8mb4 | *
| character_set_connection | utf8mb4 | *
| character_set_database | …Run Code Online (Sandbox Code Playgroud) 我正在使用旧的mysql数据库中的数据.这个数据库中有一个表,其字符串列的编码设置为"cp1252 West European(latin1)"(与Windows-1252相同).从mysql命令提示符查询数据时,此字段中的数据表示为:
Obama’s
这应该是读
Obama’s
我试过按照如何将整个MySQL数据库字符集和整理转换为UTF-8的接受答案?在MySQL中将字段转换为UTF-8,但没有区别.
我还尝试在该表中插入一个新行,使用Obama’s该字段的文本(同样,从mysql命令提示符).但是,当我查询刚刚插入的同一行时,正确表示了此文本.当字段设置为latin1并且设置为UTF-8时,我尝试执行该插入.结果相同.
这让我相信,当坏数据被插入数据库时,它首先被PHP错误编码.这是我变得模糊的地方.
我可以假设数据是通过Web表单插入并使用PHP处理的.PHP在将其插入数据库之前做了什么?它是否将字符串转换为UTF-8,根据此有用页面上的表格,它使用三个字节%E2 %80 %99来表示’字符.我有这个权利吗?
如果这是正确的,我有什么选择来修复这些数据?我想将表及其字段转换为UTF-8编码,但这似乎无法修复文本.我是否必须编写一个手动将这些字符更改为应该是什么的脚本?
我的Liquibase变更集看起来像
<changeSet id="05192014.1525" author="h2">
<createTable tableName="network">
<column name="network_id" type="BIGINT(19) UNSIGNED">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="name" type="VARCHAR(300)">
<constraints nullable="false"/>
</column>
<column name="active" type="TINYINT(1)" defaultValue="1">
<constraints nullable="false"/>
</column>
<column name="created_at" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
<column name="created_by" type="VARCHAR(100)"/>
<column name="updated_at" type="TIMESTAMP"/>
<column name="updated_by" type="VARCHAR(100)"/>
</createTable>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
Maven使用插件集成在一起mvn clean install,它创建MySQL表格 CREATE TABLE
network(network_idbigint(19)unsigned NOT NULL,namevarchar(300)NOT NULL,activetinyint(1)NOT NULL DEFAULT'1',created_attimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_byvarchar(100)DEFAULT …
我在 Mac Sierra 上使用 Django 2.0.4、MySQL 8.0.11、mysqlclient-1.3.12 和 Python 3.6.5。我收到以下警告:
/lib/python3.6/site-packages/django/db/backends/mysql/base.py:71: 警告: (3719, "'utf8' 目前是字符集 UTF8MB3 的别名,它将被 UTF8MB4 替换在以后的版本中。请考虑使用 UTF8MB4 以便明确。”)
我知道这只是一个警告,但我仍然不喜欢看到它并且一直在寻找解决方案。我尝试了很多方法,包括使用 UTF8 Collation UTF8-bin 和 UTF8MB4 Collation UTF8MB4-bin 中的各种选项删除和重新创建我的架构,但似乎没有任何效果。此警告来自 MySQL/base.py,但我不知道是谁在使用 MySQL 反对的“utf8”进行调用。
谁有想法?
附加信息
在下面的答案之后,我开始思考这个问题,并意识到到目前为止我只在 migrate 命令期间收到了这个警告,这似乎是 auth 应用程序的初始设置。我用 sqlmigrate 命令查看了所有 sql,但没有看到任何提到 utf8 的内容,所以我仍然不知道为什么会发生这种情况
(CL) Mac-mini:mysite Lehrian$ python manage.py migrate 要执行的操作:应用所有迁移:admin、auth、contenttypes、polls、sessions 运行迁移:Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK 正在应用 admin.0001_initial... OK 正在应用 admin.0002_logentry_remove_auto_add... OK 正在应用 contenttypes.0002_remove_content_type_name... OK 正在应用 auth.0002_alter_permission_name_max_length... OK 正在应用 auth.0002_alter_permission_name_max_length... OK 应用 auth.0003...身份验证mysql/base.py:71:警告:(3719,“'utf8' 目前是字符集 UTF8MB3 的别名,在未来的版本中将被 UTF8MB4 替换。请考虑使用 …
我有这样的 application.properties设置:
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.url = jdbc:mysql://localhost:3306/dbname?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
Run Code Online (Sandbox Code Playgroud)
在我的pom.xml财产中,我像这样设置:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<start-class>toyanathapi.Application</start-class>
<java.version>1.8</java.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
我的实体:@Entity公共类DailyRashifalEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String date;
private int rollno;
private String name;
//Constructors and getters/setters
}
Run Code Online (Sandbox Code Playgroud)
问题1: 如果我使用上述设置,则会出现异常
java.sql.SQLException: Incorrect string value: '\xE0\xA4\xA7\xE0\xA4\xBE...
Run Code Online (Sandbox Code Playgroud)
问题2:如果我将数据源URL更改为此:
spring.datasource.url = jdbc:mysql://localhost:3306/dbname
Run Code Online (Sandbox Code Playgroud)
我数据库中的unicode像这样保存
29 | 2074-03-04 | 3 | ?????????????? ?????,?????? ??????, ??????????? ????? ? ???? ???? …Run Code Online (Sandbox Code Playgroud) 我有包含列及其属性的 MySQL 表:
\n\nname: message\ndatatype: varchar(300)\ndefault/expression: utf8\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试在包含西里尔文文本的表中插入新数据。
\n\n这是我的 sql 查询:
\n\nINSERT INTO db.log (id, info_id, user_id, timestamp, operation, message) \n VALUES ('792','575', '35','2016-12-20 12:09:45','add',\n 'user@gmail.com created new line \xd1\x82\xd0\xb5\xd1\x81\xd1\x82 ')\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了例外:
\n\n1 row(s) affected, 1 warning(s): 1366 Incorrect string value: '\\xD1\\x82\\xD0\\xB5\\xD1\\x81...' for column 'message'
我可以做什么来解决异常?
\n我想像在mariaDB数据库中插入表情符号,但是我总是遇到sql错误。
这是堆栈跟踪:
12-01-2018 16:01:44.466 [Executor - Migration - 1] WARN o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions:129 - SQL Error: 1366, SQLState: 22007
12-01-2018 16:01:44.466 [Executor - Migration - 1] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions:131 - (conn:498) Incorrect string value: '\xF0\x9F\x92\xB3\xF0\x9F...' for column 'notes' at row 1
Query is: insert into customer (backend_archiving_date, backend_creation_date, backend_update_date, genius_client_id, address, birthday, city, company_name, country, email, fidelity_account_id, first_name, last_name, notes, phone, siret, zip_code, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?), …Run Code Online (Sandbox Code Playgroud)