当前位置:首页 » 数据仓库 » 数据库collation
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库collation

发布时间: 2022-07-06 04:34:40

⑴ 如何查看Mysql数据库字符集和Collation信息

补充。。。。select * from information_schema.character_sets;select * from information_schema.collations;select * from information_schema.collation_character_set_applicability;

⑵ 如何查看SQL SERVER 数据库的所有列的COLLATION属性

SELECT
c.object_id,
t.name,
c.name,
c.collation_name
FROM
sys.columns c INNER JOIN sys.tables t
ON c.object_id = t.object_id
运行上面的sql,可以获得你要的结果

⑶ sql数据库COLLATE

数据虽然完全相同,但是的两个数据库实例的COLLATE设置不同,两者不兼容。这种情况通常出现在与临时表进行连接的时候。临时表创建在tempdb数据库里,它默认是继承了SQL Server实例的COLLATE设置。如果你的用户数据库是从另外一台服务器附加上来的话,很可能是另一中COLLATE设置。两者不兼容就会出现这种错误。
解决办法:可以在创建临时表时,为文本字段指定 COLLATE DATABASE_DEFAULT, 从而明确指定从当前用户数据库继承 COLLATE 设置。

⑷ sql中collate是什么意思

collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。
语法
COLLATE
<
collation_name
>
<
collation_name
>
::=
{
Windows_collation_name
}
|
{
SQL_collation_name
}
参数
collation_name
是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name
可以只是指定的
Windows_collation_name

SQL_collation_name。
Windows_collation_name

Windows
排序规则的排序规则名称。请参见
Windows
排序规则名称。
SQL_collation_name

SQL
排序规则的排序规则名称。请参见
SQL
排序规则名称。
COLLATE
子句只能应用于
char、varchar、text、nchar、nvarchar

ntext
数据类型。

⑸ 怎样更改数据库原有的Collation

增加字段
ALTER TABLE ALTER TABLE add column_NAME char(200)
删除字段
ALTER TABLE ALTER TABLE DROP COLUMN column_NAME
修改字段类型
ALTER TABLE table_name ALTER COLUMN column_name new_data_type
改名
sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。

语法
sp_rename [ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]

--也可以这样做
ALTER DATABASE Eo_DBF SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--WITH ROLLBACK IMMEDIATE 执行这个命令之后,SQL Server立即断开所有的连接并回退它们的事务。所有正在执行事务的用户都会接收到一个连接错误,而且他们不能再连接数据库。
GO
alter database Eo_DBF COLLATE Chinese_PRC_CI_AS
GO
ALTER DATABASE Eo_DBF SET MULTI_USER
先变成单用户,然后进行你的操作,然后恢复正常状态

⑹ sql中的collation干什么用

排序规则(collation)

关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多

这些排序规则有什么作用呢?让我们先来看看MS官方的解释:
排序规则指定了表示每个字符的位模式。它还指定了用于排序和比较字符的规则。排序规则具有下面的特征:
语言
区分大小写
区分重音
区分假名
比如在SQL Server 2005中,排序规则名称由两部份构成,比如 Chinese_PRC_CI_AI_WS
前半部份是指本排序规则所支持的字符集,如Chinese_PRC 指针对大陆简体字UNICODE的排序规则。
后半部份即后缀的含义如下:

_BIN
指定使用向后兼容的二进制排序顺序。
_BIN2 指定使用 SQL Server 2005 中引入的码位比较语义的二进制排序顺序。
_Stroke 按笔划排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_WI(WS) 是否区分全半角,WI不区分,WS区分

既然排序规则如此复杂,那么应用了不同排序规则的列之间默认情况下便不能进行Union、Join、Like等equal操作了,于是便有了排序规则(collation)冲突。

排序规则(collation)冲突

我们知道,SQL Server 从2000 开始,便支持多个排序规则。SQL Server 2000 的数据库可使用除默认排序规则以外的其他排序规则。此外,SQL Server 2000 还支持为列专门制定排序规则。
这样一来,我们在写跨表、跨数据库、跨服务器操作的T-SQL时,如果equal的字段排序规则不同,便会发生排序规则冲突。
比如我们先见两个结构相同的表,但字段的排序规则不同:
-- 1. Create TableA.
CREATE TABLE TagsTableA
(
TagName NVARCHAR(64) COLLATE Chinese_PRC_BIN
)
-- 2. Create TableB.
CREATE TABLE TagsTableB
(
TagName NVARCHAR(64) COLLATE Chinese_PRC_CI_AS
)

当表建好之后执行:
-- 3. Try to join them
SELECT * from TagsTableA A INNER JOIN TagsTableB B on A.TagName = B.TagName

便会出下类似下面的问题:
无法解决 equal to 操作中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。

常见的场景——临时表

我们知道,SQL Server的临时表是保存在Tempdb数据库中的。而使用临时表的数据库与临时表的排序规则(conllation)不一定相同。所以,当Tempdb的排序规则与当前使用临时表的数据库排序规则不同时,便会出现排序规则冲突。
一般来说,我们在创建临时表时可能不会注意到排序规则,从而留下排序规则冲突的隐患。
比如Openlab V4.0的Blog模块中的一个存储过程,便有着这种隐患:
/****** 对?象ó: StoredProcere [blogs].[up_CreateGetTagIds] 脚本日期: 01/20/2010 19:10:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*
RETURN VALUES:
Ids
*/
-- =============================================
-- Author: <Lance Zhang>
-- Create date: <2010-01-06>
-- Description: <Make sure all the tag EXISTS in DB, and then get their ids.>
-- 1. Create Temp Table.
-- 2. Insert TagNames into Temp Table.
-- 3. Add new Tags to [Categories] from query Temp Table.
-- 4. Batch Get All Tag Ids from [Categories].
-- 5. Clear and drop Temp Table.
-- =============================================
ALTER PROCEDURE [blogs].[up_CreateGetTagIds]
(
@BlogId INT,
@TagNames XML
)
AS
BEGIN
/******************************* SET CONFIG *************************************************/
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NUMERIC_ROUNDABORT OFF

/******************************* DECLARE VARIABLE *************************************************/

/********************************BEGIN TRANSATION**********************************************/

BEGIN TRY

BEGIN TRANSACTION;

-- 1. Create Temp Table.
CREATE TABLE #TagsTable
(
TagName NVARCHAR(64)
)

-- 2. Insert TagNames into Temp Table.
INSERT INTO
#TagsTable
SELECT
TG.Tags.value('@i','NVARCHAR(64)') AS TagName
FROM
@TagNames.nodes('/ts/t') TG(Tags)

-- 3. Add new Tags to [Categories] from query Temp Table.
BEGIN
INSERT INTO
[Categories]
(
[BlogId]
,[ParentId]
,[CategoryType]
,[CategoryName]
,[LoweredCategoryName]
,[Slug]
,[LoweredSlug]
,[Description]
,[CreatedDateUtc]
,[TotalEntities]
,[SortOrder]
,[State]
)
SELECT
@BlogId,
0, -- ParentId, 0 as default.
2, -- CategoryType, 2 as Post Tag.
TT.TagName,
LOWER(TT.TagName),
TT.TagName, -- Slug, use CategoryName as default.
LOWER(TT.TagName), -- LoweredSlug, use LoweredCategoryName as default.
'', -- Description, Empty as default.
GETUTCDATE(),
0, -- TotalEntities, 0 as default.
1, -- SortOrder of PostTags can always be 1.
1 -- State, 1 as Normal.
FROM
#TagsTable TT
WHERE
LOWER(TT.TagName) NOT IN
(
SELECT
C.[LoweredCategoryName]
FROM
[Categories] C WITH( UPDLOCK, HOLDLOCK )
WHERE
[BlogId] = @BlogId
AND [CategoryType] = 2 -- Post Tag.
)

END

-- 4. Batch Get All Tag Ids from [Categories].
BEGIN
SELECT
[CategoryId]
FROM
[Categories] C WITH(NOLOCK)
JOIN
#TagsTable TT
ON
C.[LoweredCategoryName] = LOWER( TT.TagName )
WHERE
C.[BlogId] = @BlogId
AND C.[CategoryType] = 2 -- Post Tag.
AND C.[State] = 1 -- 1 as Normal status.
END

-- 5. Clear and drop Temp Table.
TRUNCATE TABLE
#TagsTable
DROP TABLE
#TagsTable

COMMIT TRANSACTION;
RETURN 1

END TRY

BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
RETURN -1
END
END CATCH
END
GO

常见的解决方案

知道了什么是排序规则冲突,我们接下来分析冲突的解决方案,以数据库级别的排序规则为例,一般来说,解决方案有下面几种
把SQL实例删了重建 ——大多数情况下等于没说-_-|||
修改数据库的排序规则 ——参考阿牛兄的这篇文章
在T-SQL中使用COLLATE DATABASE_DEFAULT来解决冲突 ——接下来主要讨论这个

COLLATE DATABASE_DEFAULT

Collate XXX 操作可以用在字段定义或使用时,它会将字段定义或转换成XXX 的排序规则格式。而Collate Database_Default 则会将字段定义或转换成当前数据库的默认排序规则,从而解决冲突。
比如在下面的代码中便使用了Collate Database_Default 来解决字段在equal操作中的排序规则冲突:
Insert into Security.Report (Name)
Select C.Path From SSRS.Catalog C
Where C.Path Collate Database_Default Like @ReportPath + '/%'
And C.Path Collate Database_Default Not In (Select Name From Security.Report R)

当然,在创建临时表时若对字段定义加上Collate Database_Default ,也可以方便地解决潜在的排序规则冲突,比如上一节中提到的存储过程,只要做如下修改即可。
-- 1. Create Temp Table.
CREATE TABLE #TagsTable
(
TagName NVARCHAR(64) COLLATE DATABASE_DEFAULT
)

结束语
对于专业的SQLer来说,排序规则的应用场景还有很多,例如利用排序规则特点计算汉字笔划和取得拼音首字母等等,更多信息,请查阅MSDN文档:http://msdn.microsoft.com/zh-cn/library/aa258237(en-us,SQL.80).aspx

⑺ MySQL建立数据库时的字段的Collation 属性 是指什么

SHOW COLLATION [LIKE 'pattern']
来自SHOW COLLATION的输出包括所有可用的字符集。该语句取一个自选的LIKE子句。该子句的pattern指示哪些整序名称可以匹配。举例说明:

mysql> SHOW COLLATION LIKE 'latin1%';
+-------------------+---------+----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1 | 5 | | | 0 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 |
| latin1_danish_ci | latin1 | 15 | | | 0 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 0 |
| latin1_general_ci | latin1 | 48 | | | 0 |
| latin1_general_cs | latin1 | 49 | | | 0 |
| latin1_spanish_ci | latin1 | 94 | | | 0 |
+-------------------+---------+----+---------+----------+---------+
Default列指示对于其字符集,整序值是否是默认值。Compiled指示字符集是否被编辑到服务器中。Sortlen与对字符串(在字符集中表达)分类所需的存储器的数量有关。

⑻ MySQL中,如何修改collation_server的latin1_swedish_ci为utf8_general_ci

追问: 为什么我的就不行呢? 回答: set collation_server='utf8_general_ci';我已经用了 是可以的。你再试试,然后有错误就把错误截图给我看下,光说没有办法帮助你。 追问: 我用的是Phpmyadmin,不知道你用过没有,可以图形界面配置Mysql 回答: 这个不是工具的问题啊···你直接把SHOW VARIABLES LIKE '%COLLATION%'换成set collation_server='utf8_general_ci';然后执行这个就行了·· 追问: 我就是用你给我说的执行的,我的截图就是我执行后的结果,重启Mysql也没有用 回答: 这个- =我怎么就可以呢。。。。。 追问: 我换了个工具,MySQL Control Center使用这个命令set collation_server='utf8_general_ci',倒是可以修改了,但是我关闭数据库,再打开,再查询又变成原来 的了?这又是什么 原因? 回答: 这个是修改当前窗口的,如果要一直这样下去···那么可以修改配置文件··· 追问: 请问怎么修改配置文件? 回答: my.ini

⑼ 如何更改 mysql collation

Mysql要解决中文乱码,最好是你把数据库的默认编码都改掉,我一般这样处理:
在mysql安装目录下的my.ini文件中做如下修改:
[mysql]下面修改
default-character-set=utf8
[mysqld]下面修改
default-character-set=utf8
把编码统一成utf8,这样做的目的在于,即可以允许你往数据中插入中文字符,又可避免中文乱码的问题。

⑽ 如何修改SQL Server 中数据库的Collation

首先你要确保你有以下权限:
需要对 master 数据库的 CREATE DATABASE 权限,或需要 CREATE ANY DATABASE/ALTER ANY DATABASE 权限。
需要对数据库拥有 ALTER 权限。
然后你可以使用SSMS或者T-SQL去修改collation。

参考链接:https://msdn.microsoft.com/zh-cn/library/ms175835.aspx