当我的列名中有空格时,为什么我的查询会中断


Why does my query break when I have spaces in my column names?

我一直收到这个错误:

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第2行的"Name int(10)NOT NULL,Middle Name varchar(10)NOTNULL,Last Name varch"附近使用的正确语法

我不确定自己犯了什么错误。。。

<?php 
mysql_connect('klaic.db.11427125.hostedresource.com', 'klaic', '*******')
or die (mysql_error());
mysql_select_db('klaic')
or die (mysql_error());
mysql_query("create table account(
   Fist Name int(10) NOT NULL, 
   Middle Name varchar(10) NOT NULL, 
   Last Name varchar(10) NOT NULL,
   Email varchar(55) NOT NULL,
   Comfirm Email varchar(55) NOT NULL,
   D.O.B varchar(10) NOT NULL,
   ID int(11) NULL,  
   PRIMARY KEY (ID)
)") or die (mysql_error());
echo "Complete.";
?>

如果你的列名中有空格,这不是一个好主意,你需要用记号来包装它们:

mysql_query("create table account(
   `Fist Name` int(10) NOT NULL, 
   `Middle Name` varchar(10) NOT NULL, 
   `Last Name` varchar(10) NOT NULL,
   `Email` varchar(55) NOT NULL,
   `Comfirm Email` varchar(55) NOT NULL,
   `D.O.B` varchar(10) NOT NULL,
   `ID` int(11) NULL,  
   PRIMARY KEY (ID)
)") or die (mysql_error());

如Schema Object Names:下所述

MySQL中的某些对象,包括数据库、表、索引、列、别名、视图、存储过程、分区、表空间和其他对象名称,都被称为标识符。

[deletia]

标识符在内部转换为Unicode。它们可能包含以下字符:

  • 不带引号的标识符中允许的字符:

    • ASCII:[0-9,a-z,a-z$_](基本拉丁字母,数字0-9,美元,下划线)

    • 扩展:U+0080。。U+FFFF

  • 带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),U+0000:除外

    • ASCII:U+00001。。U+007F

    • 扩展:U+0080。。U+FFFF

[deletia]

标识符引号字符是反勾号("`"):

因此,要在列名中包含空格/点等(这通常是个坏主意),必须引用backtick中的标识符

CREATE TABLE account (
   `Fist Name` int(10) NOT NULL, 
   `Middle Name` varchar(10) NOT NULL, 
   `Last Name` varchar(10) NOT NULL,
   `Email` varchar(55) NOT NULL,
   `Comfirm Email` varchar(55) NOT NULL,
   `D.O.B` varchar(10) NOT NULL,
   `ID` int(11) NULL,  
   PRIMARY KEY (ID)
)

如果使用空格,请在SQL语句中的列名中使用重音符号`。正确的SQL语句是:

SELECT * FROM `account` WHERE create table account(
   `First Name` int(10) NOT NULL, 
   `Middle Name` varchar(10) NOT NULL, 
   `Last Name` varchar(10) NOT NULL,
   `Email` varchar(55) NOT NULL,
   `Comfirm Email` varchar(55) NOT NULL,
   `D.O.B` varchar(10) NOT NULL,
   `ID` int(11) NULL,  
   PRIMARY KEY (ID)
)

提示:

  1. 列名中不要使用空格和大字母
  2. ID应为"自动递增"
  3. First Name(你在声明中丢失了一个字母;)应该是INT吗

亲爱的,请记住,当您提供列名时,不要在其中留出空格。例如,如果您想将表字段名设置为"First name",则可以是"First_name"或"FirstName"所以你可能会像一样

<?php 
mysql_connect('klaic.db.11427125.hostedresource.com', 'klaic', '*******')
or die (mysql_error());
mysql_select_db('klaic')
or die (mysql_error());
mysql_query("create table account(
   Fist_Name int(10) NOT NULL, 
   Middle_Name varchar(10) NOT NULL, 
   Last_Name varchar(10) NOT NULL,
   Email varchar(55) NOT NULL,
   Comfirm_Email varchar(55) NOT NULL,
   D.O.B varchar(10) NOT NULL,
   ID int(11) NULL,  
   PRIMARY KEY (ID)
)") or die (mysql_error());
echo "Complete.";
?>