tobyaddroc Asked:2024-10-25 16:09:23 +0000 UTC2024-10-25 16:09:23 +0000 UTC 2024-10-25 16:09:23 +0000 UTC 我是否需要考虑 VARCHAR 中的行结束字符 (0x00)? 772 我有一个有列的表username VARCHAR(16)。 如果我指定类型,VARCHAR(16)是否会\0考虑行末尾的 - 字符? 如果我"abcdefghijkmnopq"在请求中提交 16 个字符的字符串,它适合吗? sql 2 个回答 Voted Мелкий 2024-10-25T16:22:38Z2024-10-25T16:22:38Z 不,没有必要。这是字符(而不是字节)的大小限制,准确地说是在应用意义上,没有考虑机器实现的细节(无论是存储 NULL 终止符、存储单独的显式字符串长度(以字节为单位),还是在DBMS 开发人员自行决定) Best Answer CrazyElf 2024-10-25T16:25:57Z2024-10-25T16:25:57Z \0行尾的字符纯粹是语言的一个特征C。在其他语言中,SQL字符串的存储方式有所不同:除了字符串本身之外,还存储字符串的长度,这需要额外的 2 个字节,当您指定要在 中存储多少字节时,不会考虑这些字节VARCHAR。 所以是的,它会合适。但是,如果您想保存相同长度的字符串而不是拉丁语,而是西里尔语,那么不,它不适合。为了适应,您需要声明一个类型NCHAR或NVARCHAR,然后将以字节对的形式指定长度,并期望存储双字节字符。 虽然这一切都取决于您在数据库中使用的特定编码,但通常是这种情况。 PS 上面的信息是针对 给出的MS SQL,在其他实现中SQL可能会有所不同。
不,没有必要。这是字符(而不是字节)的大小限制,准确地说是在应用意义上,没有考虑机器实现的细节(无论是存储 NULL 终止符、存储单独的显式字符串长度(以字节为单位),还是在DBMS 开发人员自行决定)
\0行尾的字符纯粹是语言的一个特征C。在其他语言中,SQL字符串的存储方式有所不同:除了字符串本身之外,还存储字符串的长度,这需要额外的 2 个字节,当您指定要在 中存储多少字节时,不会考虑这些字节VARCHAR。所以是的,它会合适。但是,如果您想保存相同长度的字符串而不是拉丁语,而是西里尔语,那么不,它不适合。为了适应,您需要声明一个类型
NCHAR或NVARCHAR,然后将以字节对的形式指定长度,并期望存储双字节字符。虽然这一切都取决于您在数据库中使用的特定编码,但通常是这种情况。
PS 上面的信息是针对 给出的
MS SQL,在其他实现中SQL可能会有所不同。