當前位置:首頁 » 數據倉庫 » 資料庫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