Microsoft SQL Serverがtext
データ型を廃止してvarchar(max)
を採用したことを読んだことがあります。
PostGreSQLはvarchar
の代替としてtext
(長さなし)をすでに許可しています。
問題は、ANSI SQL標準がtext
の廃止について何を言わなければならないか、そして最良の代替案ですか?また、MySQL/MariaDBもこれに従いますか?
ありがとう
ANSI SQL標準では、TEXT
タイプはありません。 CHAR
やVARCHAR
など、さまざまな文字列型が定義されていますが、TEXT
型については言及されていません。 _CHARACTER LARGE OBJECT
_と_BINARY LARGE OBJECT
_があります。
さまざまなDBMS(Postgres、SQL Server、MySQL)にあるさまざまなTEXT
タイプは追加であり、それらの間にはわずかな違いがあります。それらの類似点は、非常に大きな文字列を保持できることです。
SQL ServerのTEXT
は廃止される予定です。 MySQLのTEXT
は非推奨ではありません。 PostgreSQLのTEXT
は十分にサポートされており、VARCHAR(n)
の代わりにあらゆる場所で使用することが多くの人に推奨されています。 Postgresのドキュメントから 文字タイプ :
さらに、PostgreSQLは、任意の長さの文字列を格納するテキストタイプを提供します。 type
text
はSQL標準にはありませんが、他のいくつかのSQLデータベース管理システムにもあります。
だから、質問:
問題は、ANSI SQL標準が
text
の廃止について何を言わなければならないか、そして最良の代替案ですか?また、MySQL/MariaDBもこれに従いますか?
答えるのは簡単です:何もありません。TEXT
タイプがないため、TEXT
の廃止はありません。 TEXT
は、ANSI SQLの予約済みキーワードでもありません。あるDBMS(MySQL)は、標準にないタイプの別のDBMS(SQL Server)の廃止決定に従う必要はありません。
ANSI SQL標準(私があなたが参照していると想定しています)は、Microsoft(またはOracleなど)が特定のDBMSの種類に合うようにデータ型を実装および削除する方法、およびどれが優先されるかについては何も述べていません。
Microsoftの標準では、テキストの代わりにvarchar、ntextの代わりにnvarchar、イメージの代わりにvarbinaryを使用しています。これは、データタイプの機能/パフォーマンスが向上し、データベースにどのように格納されるかによるものです。
詳細については、StackOverflowに関する質問と回答をご覧ください。 https://stackoverflow.com/questions/564755/sql-server-text-type-vs-varchar-data-type
更新
これは、購入せずに標準を読むのと同じくらい近いものです。セクションに興味があります4.4.3.2文字列タイプ
http://jtc1sc32.org/doc/N1951-2000/32N1963T-text_for_ballot-FCD_9075-1.pdf
先に述べたように、標準は、データタイプを非推奨にする方法や、固有のデータタイプについては関係ありません。 a型自体が準拠する必要があるものだけです。
また、PDFはSQL:2011 Wikiページにあります(この質問をする前に確認したと思います)。) https://en.wikipedia.org/wiki/SQL:2011