MsSQL中汉字默认编码是UTF8还是GBK?应该怎样调整?

daddi 2010-07-04 12:53:23
MsSQL中汉字默认编码是UTF8还是GBK?应该怎样调整?
比如说将编码从GBK改为UTF8或者将编码从UTF8改为GBK。
...全文
1588 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianfushancs 2012-09-20
  • 打赏
  • 举报
回复
什么呀就结贴? 问题没解决啊,我存汉语没事,存英语提示超出.我认为是编码问题.
HULIHONG 2010-07-05
  • 打赏
  • 举报
回复
自己先到网上去搜索一下,资料很多的,我当时就是在网上找的,细节忘了 ^_^
bancxc 2010-07-04
  • 打赏
  • 举报
回复
排序规则 默认的是什么?

用unicode 可以用类型 nvarchar nchar等
  • 打赏
  • 举报
回复
服务器级别,确定方法很简单。
当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。可以使用--default-character-set设置字符集,并且可以在字符集后面为 校对规则添加--default-collation。
如果没有指定一个字符集,那就与--default-character-set=latin1相同。如果你仅指定了一个字符集(例如,latin1),但是没有指定一个 校对规则,那就与--default-charset=latin1 --default-collation=latin1_swedish_ci相同,因为latin1_swedish_ci是latin1的默认校对规则。
因此,以下三个命令有相同的效果:

shell> mysqld

shell> mysqld --default-character-set=latin1

shell> mysqld --default-character-set=latin1 \

--default-collation=latin1_swedish_ci

更改设定值的一个方法是通过重新编译。如果希望在从源程序构建时更改默认服务器字符集和校对规则,使用:--with-charset和--with-collation作为configure的参量。例如:

shell> ./configure --with-charset=latin1
或者:

shell> ./configure --with-charset=latin1 \

--with-collation=latin1_german1_ci

mysqld和configure都验证字符集/校对规则组合是否有效。如果无效,每个程序都显示一个错误信息,然后终止。

当前的服务器字符集和校对规则可以用作character_set_server和collation_server系统变量的值。在运行时能够改变这些变量的值。
  • 打赏
  • 举报
回复
服务器级别,确定方法很简单。
当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。可以使用--default-character-set设置字符集,并且可以在字符集后面为 校对规则添加--default-collation。
如果没有指定一个字符集,那就与--default-character-set=latin1相同。如果你仅指定了一个字符集(例如,latin1),但是没有指定一个 校对规则,那就与--default-charset=latin1 --default-collation=latin1_swedish_ci相同,因为latin1_swedish_ci是latin1的默认校对规则。
因此,以下三个命令有相同的效果:

shell> mysqld

shell> mysqld --default-character-set=latin1

shell> mysqld --default-character-set=latin1 \

--default-collation=latin1_swedish_ci

更改设定值的一个方法是通过重新编译。如果希望在从源程序构建时更改默认服务器字符集和校对规则,使用:--with-charset和--with-collation作为configure的参量。例如:

shell> ./configure --with-charset=latin1
或者:

shell> ./configure --with-charset=latin1 \

--with-collation=latin1_german1_ci

mysqld和configure都验证字符集/校对规则组合是否有效。如果无效,每个程序都显示一个错误信息,然后终止。

当前的服务器字符集和校对规则可以用作character_set_server和collation_server系统变量的值。在运行时能够改变这些变量的值。
bruce_woo 2010-07-04
  • 打赏
  • 举报
回复
都没怎么用过MySQL~
daddi 2010-07-04
  • 打赏
  • 举报
回复
好,谢谢老大,结贴。
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
在2000中 没有办法突破 SQL Server2000中最大数据行的大小为8060(我们可以使用的大小为8039),即创建表时所有列的大小总和不能超过8060。 这个限制

介意把字段拆分到多个表 用关键字段联接使用~
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 daddi 的回复:]

我的有报错,不明白原因。
[/Quote]
2000我没环境 你去查下相关文档~
daddi 2010-07-04
  • 打赏
  • 举报
回复
我的有报错,不明白原因。
daddi 2010-07-04
  • 打赏
  • 举报
回复
服务器: 消息 511,级别 16,状态 1,行 1
无法创建大小为 21019 的行,该值大于允许的最大值 8060。
语句已终止。
bancxc 2010-07-04
  • 打赏
  • 举报
回复
每行最长是8060 插入的时候会有警告提示[Quote=引用 15 楼 daddi 的回复:]
哦,这是sql2005新的功能吗?我在2003server,sql2000下测试时报错了,说该行大小大于8060字节。
[/Quote]
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
insert test1
select REPLICATE('a',7000),REPLICATE('a',7000),REPLICATE('a',7000)

去执行下 我这不报错~
daddi 2010-07-04
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[test1] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[cont1] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,
[cont2] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,
[cont3] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

以上是我测试的一个表,其中cont1,cont2,cont3都是长8000的varchar类型,往里面每个字段都写入略大于6000的英文字母,然后就报错。

报错语句如下:无法创建大小为 18133 的行,该值大于允许的最大值 8060。
语句已终止。
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 daddi 的回复:]

哦,这是sql2005新的功能吗?我在2003server,sql2000下测试时报错了,说该行大小大于8060字节。
[/Quote]
你的建表语句 我看下 ~~~~~
daddi 2010-07-04
  • 打赏
  • 举报
回复
哦,这是sql2005新的功能吗?我在2003server,sql2000下测试时报错了,说该行大小大于8060字节。
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
这里你只要将你的变长字段 设置成nvarchar(4000)就可以了 只要保证你的单个字段不超出8K就好。。
feixianxxx 2010-07-04
  • 打赏
  • 举报
回复
我有八个列,每个列大约800个字节,用text类型就有点过份了,
但是用varchar的话,若汉字是二字节的,那么总共6400个字节再加上id列,加上日期等一些小列也才6800字节。若有些汉字是三字节的,那就无法保证一定不超过8000字符。
用nvarchar的话那是一定会超过8000字符的,毕竟里面有一些英文字符,若那些算两字节的话就会超出。

====》


页的单个行中的最大数据量和开销是 8,060 字节 (8 KB)。但是,这不包括用 Text/Image 页类型存储的数据。包含 varchar、nvarchar、varbinary 或 sql_variant 列的表不受此限制的约束。
当表中的所有固定列和可变列的行的总大小超过限制的 8,060 字节时,SQL Server 将从最大长度的列开始动态将一个或多个可变长度列移动到 ROW_OVERFLOW_DATA 分配单元中的页
将列移动到 ROW_OVERFLOW_DATA 分配单元中的页后,将在 IN_ROW_DATA 分配单元中的原始页上维护 24 字节的指针。如果后续操作减小了行的大小,SQL Server 会动态将列移回到原始数据页.

SQL Server会自动处理你溢出的长度。。


daddi 2010-07-04
  • 打赏
  • 举报
回复
其中难受的地方在于0.8K字节的东西用text来保存,心里总是堵得慌。
以前只是大于8K的地方用text来保存。
daddi 2010-07-04
  • 打赏
  • 举报
回复
汉字若是三字节的话,每列可能就不止800个字节。
汉字是两字节的话,每列可能只有600字节,在一些特殊的情况下可能达到700多字节。
加载更多回复(9)

34,870

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧