Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DackAle

básicas

Recommended Posts

E ae galeraTo com umas dúvidas basicas aquiAinda não entendi para que serve o "unsigned", coloca em campos do tipo texto, alguem pode me explicar ?Idem ao acima, para que server o "collate", tipo este "collate utf8_unicode_ci" ?O MySQL suporta foreign key (chave estrangeira) ?Abraços e valeu galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom ... vou tentar ajudar dentro do que eu sei ...Pelo que eu sei, no unsigned (ou sem sinal) é para determinar a capacidade do campo. Ex: um campo de x bits que iria até 10 no modo unsigned, só iria até 5 com isto desabilitado (0 a 10 ; -5 a 5).Não sei nada sobre colleteSim, o MySQl suporta chave estrangeira e índices tranquilamente ...Se tiver dúvida sobre isso, posso te ajduar por MSN ... mas é fácil fácil fazer isso usando um front end ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi ... acho que tem alguma coisa a ver com o idioma ... acentuação ... sei lá ...Peguei isto daqui no manual do MySQL ... Mas tá em arquivo ... senão eu te passava o link ...Copiei e Colei ...9.3.2. Conjunto de Caracteres e Collation de Banco deDadosTodo banco de dados tem um conjunto de caracteres de banco de dados e uma collatio de banco dedados, que não podem ser nulos. Os comandos CREATE DATABASE e ALTER DATABASE agorapossuem cláusulas opcionais para especificarem o collation e conjunto de caracteres de banco de dados:CREATE DATABASE db_name[DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]ALTER DATABASE db_name[DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]Exemplo:CREATE DATABASE db_nameDEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;O MySQL escolhe o conjunto de caracteres e collations do banco de dados desta forma:• Se CHARACTER SET X e COLLATE Y foram especificados, então o conjunto de caracteres éX e a é collation Y.• Se CHARACTER SET X foi especificado sem COLLATE, então o conjunto de caracteres é X e acollation é o padrão.• Senão utiliza o conjunto de caracteres e a collation de servidor.Conjunto de Caracteres Nacionais e Unicode662A sintaxe CREATE DATABASE ... DEFAULT CHARACTER SET ... do MySQL é análogaa sintaxe CREATE SCHEMA ... CHARACTER SET ... do padrão SQL. Por isto, é possívelcriar bancos de dados com com conjunto de caracteres e collations diferentes, no mesmo servidorMySQL.O conjuto de caracteres e collations do banco de dados são usados como valores padrões se o conjuntode caracteres e a collation de tabela não forem especificados nas instruções CREATE TABLE.Eles não possuem nenhum outro propósito.9.3.3. O Conjunto de Caracteres e Collations de TabelaToda tabela tem um conjunto de caracteres e collations de tabela, que não pode ser nulo. As instruçõesCREATE TABLE e ALTER TABLE agora possuem um cláusula opcional para especificar oconjunto de caracteres e collation de tabela:CREATE TABLE table_name ( column_list )[DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]ALTER TABLE table_name[DEFAULT CHARACTER SET character_set_name] [COLLATE collation_name]Exemplo:CREATE TABLE t1 ( ... ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;O MySQL escolhe o conjunto de caracteres e collation de tabela desta forma:• Se CHARACTER SET X e COLLATE Y forem especificados, então o conjunto de caracteres éX e collation é Y.• Se CHARACTER SET X foi especificado sem COLLATE, então o conjunto de caracteres é X e ocollation é o padrão.• Senão, o conjunto de caracteres e collation são os padrões.O conjunto de caracteres e collation de tabela são usado como valores padrões, se o conjunto de caracterese collation de colunas não são especificados nas definições de colunas individuais. O conjuntode caracteres e collation de tabelas são extensões MySQL; não há nada deste tipo na padrãoSQL.9.3.4. Conjunto de Caracteres e Collation de ColunasToda coluna ``caracter'' (isto é, uma colua do tipo CHAR, VARCHAR, ou TEXT) tem um conjunto decaracteres e collation de coluna, que não pode ser nulo. A sintaxe de definição de coluna agora possuiuma cláusula opcional para especificar o conjunto de caracteres e collation:column_name {CHAR | VARCHAR | TEXT} (column_length)[CHARACTER SET character_set_name [COLLATE collation_name]]Exemplo:CREATE TABLE Table1(column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci);O MySQL escolhe o conjunto de caracteres e collation de coluna desta forma:Conjunto de Caracteres Nacionais e Unicode663• Se CHARACTER SET X e COLLATE Y forem especificados, então o conjunto de caracteres éX e collation é Y.• Se CHARACTER SET X foi especificado sem COLLATE, então o conjunto de caracteres é X e ocollation é o padrão.• Senão, o conjunto de caracteres e collation são os padrões.As cláusulas CHARACTER SET e COLLATE são do padrão SQL.9.3.5. Exemplos de Atribuições de Conjuntos de Caracterese CollationOs seguintes exemplos mostram como o MySQL determina valores de conjunto de caracteres e collationspadrões.Exemplo 1: Definição de Tabela + ColunaCREATE TABLE t1(c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;Aqui você tem uma coluna com um conjunto de caracteres latin1 e um collation latin1_german1_ci. A definição é explicita, assim ele é direto. Note que não há problemas em armazenaruma coluna latin1 em uma tabela latin2.Example 2: Definição de Tabela + ColunaCREATE TABLE t1(c1 CHAR(10) CHARACTER SET latin1) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;Desta vez temos uma coluna com um conjunto de caracteres latin1 e uma collation padrão. Agora,embora possa parecer natural, a collation padrão é tomada do nível de tabela. Como a collationpadrão para latin1 é sempre latin1_swedish_ci, a coluna c1 terá uma collation latin1_swedish_ci (e não latin1_danish_ci).Exemplo 3: Definição de Tabela + ColunaCREATE TABLE t1(c1 CHAR(10)) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;Temos uma coluna com um conjunto de caracteres padrão e uma collation padrão. Nesta circunstância,o MySQL olha para o nível de tabela para determinar o conjunto de caracteres e collation de coluna.Assim o conjunto de caracteres para colune c1 é latin1 e sua collation é latin1_danish_ci.Exemplo 4: Definição de Banco de Dados + Tabela + ColunaCREATE DATABASE d1 DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;USE d1;CREATE TABLE t1(c1 CHAR(10));Conjunto de Caracteres Nacionais e Unicode664Criamos uma coluna sem especificar seu conjunto de caracteres e collation. Também não especificamosum conjunto de caracteres e uma collation na nível de tabela. Nestas circubntâncias, o MySQLolha para o nível de banco de dados para a determinação. (A configuração do banco de dados se tornaa configuração da tabela e então a configuração da coluna). Assim o conjunto de caracteres paracoluna c1 é latin2 e sua collation é latin2_czech_ci.9.3.6. Conjunto de Caracteres e Collation de ConexãoToda conexão tem o seu conjunto de caracteres e collation, que não podem ser nulos. Esistem atualmentedois conjuntos de caracteres de conexão, que chamamos ``connection/literals'' e``connection/results'' quando é necessário distingui-los.Considere o que é uma ``conexão'': é o que você faz quando conecta ao servidor. O cliente envia instruçõesSQL, como consultas, pela conexão com o sevidor. O servidor envia respostas, como resultados,pela conexão de volta para o cliente. Isto leva a diversas questões, tal como: (a) em qual conjuntode caracteres está uma consulta quando ela deixa o cliente? ( B) em qual conjunto de caractereso servidor deve traduzir uma consulta após recebê-la? © para qual conjunto de caracteres o servidordeve traduzir antes de enviar o resultado ou mensagem de erros de volta para o cliente? Você podefazer um ajuste fino das configurações para isto, ou você pode depender dos padrões (neste caso, vocêpode ignorar esta seção).Existem suas instruções que afetam o conjunto de caracteres da conexão:SET NAMES character_set_nameSET CHARACTER SET character_set_nameSET NAMES indica o que está na instrução SQL que o cliente envia. Assim, SET NAMEScp1251diz ao servidor que ``futuras mensagens vindas do cliente estarão no conjunto de caracterescp1251'' e o servidor está livre para traduzir para seu próprio conjunto de caracteres, se apropriado.SET CHARACTER SET indica o que está na instrução SQL que o cliente envia, e também o queestá no resultado que o servidor envia de volta para o cliente. Assim, SET CHARACTER SET incluiSET NAMES, e também especifica qual conjunto de caracteres o valor da coluna terá se, porexempo, você usar uma instrução SELECT.EXEMPLO: Suponha que column1 é definido como CHAR(5) CHARACTER SET latin2. Sevocê não utilizar SET CHARACTER SET, então para SELECT column1 FROM t o servidorenviará de volta todos os valores para column1 usando o conjunto de caracteres latin2. Se poroutro lado você usar SET CHARACTER SET latin1 então o servidor, antes de enviar de volta,converterá os valores latin2 para latin1. Tal conversão é lenta e poder ter perdas.Quando você executa SET NAMES ou SET CHARACTER SET, você também está alterando a``collation da conexão''. No entanto a collation da conexão existe apenas para consistência. Normalmenteo seu valor não importa.Com o cliente mysql, não é necessário executar SET NAMES todas as vezes que você inicá-lo. Vocêpode adicionar a opção --default-character-set-name a sua linha de instrução domysql, ou em seu arquivo de opção. Por exemplo, a seguinte configuração do arquivo de opção iráalterar o conjunto de caracteres da conexão cada vez que você executar mysql:[mysql]default-character-set-name=character_set_name9.3.7. Conjunto de Caracteres e Collation de Caracterde String LiteralTodo caracter de uma string literal tem um conjunto de caracteres e collation, que podem ser nulos.Um caracter de uma string literal pode ter um introdutor de conjunto de caracteres opcional e cláusulaCOLLATE:Conjunto de Caracteres Nacionais e Unicode665[_character_set_name]'string' [COLLATE collation_name]Exemplos:SELECT 'string';SELECT _latin1'string';SELECT _latin1'string' COLLATE latin1_danish_ci;A instrução simples SELECT 'string' usa o conjunto de caracteres da conexão/literal.A expressão _character_set_name é formalmente chamada um introdutor. Ele diz ao analisadorque ``a string que ele vai seguir está no conjunto de caracteres X.'' Como isto tem confundido aspessoas no passado, enfatizamos que um introdutor não faz qualquer conversão, ele simplesmenteum sinal que não altera o valor da string. Um introdutor também é permitido antes de uma notaçãode um literal hexa padrão e um literal hexa numérico (x'literal' e 0xnnnn), e antes de ?(substituição de parâmetros ao usar intruções preparadas dentro de uma interface de linguagem deprogramação).Exemplos:SELECT _latin1 x'AABBCC';SELECT _latin1 0xAABBCC;SELECT _latin1 ?;O MySQL determina um conjunto de caracteres e collation de literal desta forma:• Se _X e COLLATE Y forma especificados então o conjunto de caracteres do literal é X e o collationdo literal é Y• Se _X é especificado mas COLLATE não é especificado, então o conjunto de caracteres do literalé X e a collation do literal é a collation padrão do X• De outra forma, o conjunto de caracteres e collation é o da conexão/literal.Exemplos:• Uma string com o conjunto de caracteres latin1 e collation latin1_german1_ci.SELECT _latin1'Müller' COLLATE latin1_german1_ci;• Uma string com conjunto de caracteres latin1 e e sua collation padrão, isto é, latin1_swedish_ci:SELECT _latin1'Müller';• Uma string com o conjunto de caracteres e a collation da conexão/literal:SELECT 'Müller';Introdutores de conjunto de caracteres e a cláusula COLLATE são implementados de acordo com asespecificações do padrão SQL.9.3.8. Cláusula COLLATE em Várias Partes de uma ConsultaSQLConjunto de Caracteres Nacionais e Unicode666Com a cláusula COLLATE você pode sobrescrever o padrão da collation, qualquer que seja ele, paracomparação. COLLATE pode ser usada em várias partes da consulta SQL. Aqui estão alguns exemplos:• Com ORDER BY:SELECT kFROM t1ORDER BY k COLLATE latin1_german2_ci;• Com AS:SELECT k COLLATE latin1_german2_ci AS k1FROM t1ORDER BY k1;• Com GROUP BY:SELECT kFROM t1GROUP BY k COLLATE latin1_german2_ci;• Com aggregate functions:SELECT MAX(k COLLATE latin1_german2_ci)FROM t1;• Com DISTINCT:SELECT DISTINCT k COLLATE latin1_german2_ciFROM t1;• Com WHERE:SELECT *FROM t1WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k;• Com HAVING:SELECT kFROM t1GROUP BY kHAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;9.3.9. Precedência da Cláusula COLLATEA cláusula COLLATE tem alta precedência (maior que ||), então a expressãox || y COLLATE zé equivalente a:x || (y COLLATE z)Conjunto de Caracteres Nacionais e Unicode6679.3.10. Operador BINARYO operador BINARY é uma atalho para uma cláusula COLLATE. Por exemplo, BINARY 'x' éequivalente a 'x' COLLATE y, onde y é o nome de uma collation binária apropriada. Por exemplo,assumindo que a coluna a é do conjunto de caracteres latin1, estas duas consultas têm omesmo efeito:SELECT * FROM t1 ORDER BY BINARY a;SELECT * FROM t1 ORDER BY a COLLATE latin1_bin;Nota: Todo conjunto de caracteres tem um collation binário.9.3.11. Alguns Casos Especiais Onde a Determinaçãoda Collation e TrabalhosaNa grande maioria das consultas, é obvio qual collation que o MySQL usa para resolver uma operaçãode comparação. Por exemplo, nos seguintes casos deve estar claro que a collationserá ``a collationde coluna da coluna x'':SELECT x FROM T ORDER BY x;SELECT x FROM T WHERE x = x;SELECT DISTINCT x FROM T;No entanto, quando múltiplos operandos estão envolvidos, pode haver ambiguidade. Por exemplo:SELECT x FROM T WHERE x = 'Y';Esta consulta deve usar a collation de coluna x, ou da string literal 'Y'?O padrão SQL resolve tal questão usando o que se costuma chamar real ``coercibilidade''. A essênciaé: Como x e 'Y' tem collation, qual collation toma precedência? É complexo, mas estas regrascuidariam da maioria das situações:• Uma cláusula COLLATE explicita tem precedência 4• Uma concatenação de duas strings com diferentes collations tem precedência 3.• Uma collation de coluna tem precedência 2.• Uma collation de literal tem precedência 1.Estas regras resolvem ambiguidades da seguinte forma:• Use a collation com a maior precedência.• Se ambos os lados tiverem a mesma precedência, então terá um erro se a collation não são asmesmas.Exemplos:column1 = 'A' Usa a collation de column1column1 = 'A' COLLATE x Usa a collation de 'A'column1 COLLATE x = 'A' COLLATEyErrorConjunto de Caracteres Nacionais e Unicode6689.3.12. Collations Devem Ser para o Conjunto de CaracteresCertoLembramos que cada conjunto de caracteres tem um ou mais collation, e cada collation é associadacom um e apenas um conjunto de caracteres. Consequentemente, a seguinte instrução causa ummensagem de erro porque a collation latin2_bin não é permitida com o conjunto de caractereslatin1:mysql> SELECT _latin1 'x' COLLATE latin2_bin;ERROR 1251: COLLATION 'latin2_bin' is not validfor CHARACTER SET 'latin1'9.3.13. Um exemplo do Efeito da CollationSuponha que a coluna X na tabela T possui estes valores na coluna latin1:MufflerMüllerMX SystemsMySQLE suponha que os valores da coluna são retornados usando a seguinte instrução:SELECT X FROM T ORDER BY X COLLATE collation_name;A ordem resultante dos valores para diferentes collation é mostrado nesta tabela:latin1_swedish_ci latin1_german1_ci latin1_german2_ciMuffler Muffler MüllerMX Systems Müller MufflerMüller MX Systems MX SystemsMySQL MySQL MySQLA tabela é um exemplo que mostra que mostra qual seria o efeito se usassemos collation diferentesem um cláusula ORDER BY. O caracter que está causando o problema neste exemplo é o U comdois pontos sobre ele, que os Alemães chamam de U-umlaut, mas nós chamamos de U-diaeresis.A primeira coluna mostra o resultado da SELECT usando as regras de collation Suéco/Finlandês,que diz que U-diaeresis ordena com Y.A segunda coluna mostra o resultado da SELECT usando as regras Almão DIN-1, que diz que Udiaeresisordena com U.A terceira coluna mostra o resultado da SELECT usando as regras Almão DIN-2, que diz que Udiaeresisordena com UE.Três collation diferentes, três resultados diferentes. Isto é o que o MySQL está aqui para tratar.Usando a collation apropriada, você pode esclher a ordem que você deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.