如何对mysql中的字符进行编码转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对mysql中的字符进行编码转换相关的知识,希望对你有一定的参考价值。

参考技术A utf8编码可以支持一到4字节的字符编码,在mysql用我们一般使用utf8编码来处理字符类型,通常情况下都没有问题,但遇到4字节编码的字符,在数据存取的时候就会有问题了。
  通常我们可能会得到一个错误或者警告:incorrect
string
value:
'\xf0\x9d\x8c\x86'
for
column
...
  mysql
从5.5.3版本开始支持4字节的utf8编码,如果你的mysql数据库是5.5.3+,按照以下步骤就能解决这个问题,如果版本低于5.5.3,是不是可以考虑升级数据库版本呢?
  1、在修改数据库编码前先对数据库备份(虽然utf8mb4兼容utf8,但有备无患)
  2、修改数据库的编码、表的编码、列的编码为utf8mb4
  3、在mysql数据库配置文件(my.ini)中加入如下设置
  [client]
default-character-set
=
utf8mb4
[mysql]
default-character-set
=
utf8mb4
[mysqld]
character-set-client-handshake
=
false
character-set-server
=
utf8mb4
collation-server
=
utf8mb4_unicode_ci
  重新启动mysql数据库,确认设置生效
  mysql>
show
variables
like
'%char%';
+--------------------------+----------------------------------------+
|
variable_name
|
value
|
+--------------------------+----------------------------------------+
|
character_set_client
|
utf8
|
|
character_set_connection
|
utf8
|
|
character_set_database
|
utf8mb4
|
|
character_set_filesystem
|
binary
|
|
character_set_results
|
utf8
|
|
character_set_server
|
utf8mb4
|
|
character_set_system
|
utf8
|
|
character_sets_dir
|
/home/app/mysql-5.5.33/share/charsets/
|
+--------------------------+----------------------------------------+
8
rows
in
set
  4、在获取数据库连接的时候执行sql:set
names
utf8mb4;我使用的是alibaba的开源数据库连接池程序,在配置文件中增加一行如下配置
重新启动应用程序,问题解决,转载,仅供参考。
参考技术B 首先,到mysql\bin
下面,利用mysqldump这个工具,执行以下命令:
mysqldump
--u=root
-p
--default-character-set=latin1
--set-charset=utf8
--skip-opt
--result-file=c:\mytable.sql
mydb
mytable
其中:root
为数据库登录名,
latin1
为源表(就是想进行转码的表)的编码,
utf8
为想转换成的编码,
c:\mytable.sql
为导出的数据的存放文件(临时用),
mydb是源表所属的数据库(schema),mytable
就是源表名了
执行这条命令,会提示输入密码,输入正确的密码以后,就开始导出数据了。等到数据全部导出以后,可以用ue等工具打开,这时可以看到这些数据的编码已经转变了。
然后需要对这个文件进行一点点更改。在文件的最开头有一个建表语句。类似于:
Java代码
CREATE
TABLE
`mytable`
(
`tableid`
bigint(20)
unsigned
NOT
NULL,
`c1`
int(10)
unsigned
NOT
NULL
default
'0',
`c2`
int(10)
unsigned
NOT
NULL
default
'0',
PRIMARY
KEY
(`tableid`)
);
注意看最后的分号,缺少了一点点东西:engine=myisam
DEFAULT
CHARSET=utf8
engine

charset
的意义地球人都知道啊...
将这一段加进去。结果可能是这样:
Java代码
CREATE
TABLE
`mytable`
(
`tableid`
bigint(20)
unsigned
NOT
NULL,
`c1`
int(10)
unsigned
NOT
NULL
default
'0',
`c2`
int(10)
unsigned
NOT
NULL
default
'0',
PRIMARY
KEY
(`tableid`)
)
engine=myisam
DEFAULT
CHARSET=utf8;
其中engine

charset
改成期望的东西,如:innodb
gbk
等...
保存文件。(如果是用UE等工具即使文件大也不会等太久,如果用记事本打开的……恭喜你!

这样就成功了一半了,剩下的工作只需要导入这个转好码的数据了。
将原来的那个表改名,一是为了备份,二是防止导入的时候说表已经存在。
然后还是进入mysql\bin
下面,运行:
Java代码
mysql
-u
root
-p
mydb
<
c:\mytable.sql
输入密码以后程序开始工作,一段时间以后,新表就出来咯...

如何在 C# 中将 dd/mm 转换为 Mysql 日期时间格式

【中文标题】如何在 C# 中将 dd/mm 转换为 Mysql 日期时间格式【英文标题】:How to convert dd/mm to Mysql Datetime format in c# 【发布时间】:2014-09-18 03:08:35 【问题描述】:

我有一个dd/mm 格式的日期字符串,例如06/03。现在我必须将此字符串以DATETIME 格式存储到mysql 表列中。

我遇到的问题是我如何一般添加当前年份,因为我不想对其进行硬编码。随后我将如何将其转换为 MySql DATETIME 格式以保存它。

请帮帮我。

【问题讨论】:

“一般添加当前年份”是什么意思? @Noctis 我的意思是我不想手动提供像2014 这样的年份细节。我希望程序获取当前年份并附加到日期字符串中。 【参考方案1】:

你可以使用Parse DateTime 的方法:

DateTime dateTime = DateTime.Parse("06/03");

更新

您的评论:

同样在解析为 DateTime 之后,我得到了正确的日期,但时间我 不想是上午 12:00:00,而是希望它是 00:00:00。

12:00:00 AM 仅对应于00:00:00。您可以通过获取将返回 0 的 Hour 属性以及 TimeOfDay 也将返回 00:00:00 来验证这一点。

即使您尝试解析确切的日期,它也会创建相同的格式。

DateTime dateTime = DateTime.ParseExact("06/03 00:00:00", "dd/MM hh:mm:ss", 
                                         CultureInfo.InvariantCulture);

而且您不需要从 DateTime 对象转换为符合 SQL 的 DateTime 对象。您可以将 .Net 对象传递给 SQL 编写器。

【讨论】:

好的,我应该如何将它转换成 Mysql DATETIME 格式 同样在解析为DateTime 之后,我得到了正确的日期,但时间我不想成为12:00:00 AM,而是我希望它是00:00:00 @user3816352:看我的回答【参考方案2】:

你可以做类似的事情

var some_date = "06/03";
var year = DateTime.Now.Year;

var option = some_date+"/"+year;

或使用任何字符串格式来满足您的需要

有关日期字符串格式的更多信息,请参见this MSDN 页面。


编辑

如果您想要时间为零,就像您的评论所说的那样,您可以使用 Rohit vats answer 并执行以下操作:

DateTime dateTime = DateTime.Parse("06/03");
var s1 = dateTime.ToString("MM/dd/yy 00:00:00");
// Output: 03/06/14 00:00:00
var s2 = dateTime.ToString("MM/dd/yyyy 00:00:00");
// Output: 03/06/2014 00:00:00

【讨论】:

好的,但是我的格式是dd/MM。请看帖子,这里是MM/dd。它将日期转换为月份,反之亦然 ToString() 上将MM/dd 换成dd/MM。如果你愿意,我可以更新答案,但输出会根据你的格式而改变,MSDN 页面有你可能想要或需要的所有铃声和选项:) OK。再查询一下如何发送到mysql DATETIME格式【参考方案3】:

考虑代码: C#

    string s = "06/03";
    System.DateTime dateNow = Convert.ToDateTime(s);

将根据您的需要提供输出

在 VB.Net 中:

Dim s As String = "06/03"
Dim dateNow As Date = CDate(s)
MsgBox(dateNow)

【讨论】:

以上是关于如何对mysql中的字符进行编码转换的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中对字符串进行 URL 编码

MySQL--SQL优化案例--隐式字符编码转换

javaIO流之字节到字符流的转换流

如何转换内码

将字符串字段转换为 MongoDB 中的编码字符串

如何在 JavaScript 中使用字节数组将字符串转换为 base64 编码?