Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: bigint i php
Forum PHP.pl > Forum > PHP
flashdev
Jak najlepiej dodać daną bigint (64 bit) do tabeli mysql, skoro php obsługuje maksymalnie 32-bitowe liczby?
Trzymać ją w stringu w php a następnie rzutować na bigint w mysql, czy moze da się przekazać mysql`owi dwie liczby typu int a mysql wykona coś typu: liczba1<<32 + liczba2
rzymek01
dużą liczbę możesz trzymać w stringu (pomocna może byc biblioteka BCMath), a MySQL to już chyba sam sobie przekonwertuje jak mu w zapytaniu dasz stringa biggrin.gif
flashdev
Sam nie wiem czy takie rzutowanie na string, a potem na liczbę jest sensowne.
krowal
A nie możesz po prostu ustawić typu pola w tabeli na BIGINT ? zgodnie z manualem MySQL powinno Ci to dać możlowość zapisywania liczb 64 bity (unsigned) lub ze znakiem 63 bity.
Crozin
Możesz trzymać to w stringu, gdyż zapytanie SQL to string. Zwróć uwagę, że w przykładowym
  1. <?php
  2. mysql_query('BLAH BLAH abc = 123456789012345678 BLAH BLAH;');
  3. ?>
Nie ma tak naprawdę żadnej liczby - jest jedynie tekst, z punktu widzenia PHP.
krowal
No proszę Ciebie, nie mów, że nie ma różnicy pomiędzy danymi liczbowymi a tekstowymi trzymanymi w bazie smile.gif
Aż pomyślałem, że pokaże na najprostszym przykładzie:


Tabela z danymi w BIGINT:
  1. --
  2. -- Struktura tabeli dla `test2`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `test2` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `test` bigint(20) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  10.  
  11. --
  12. -- Zrzut danych tabeli `test2`
  13. --
  14.  
  15. INSERT INTO `test2` (`id`, `test`) VALUES
  16. (1, 8223372036854775807),
  17. (2, 9);

Tabela z danymi w VARCHAR:
  1. --
  2. -- Struktura tabeli dla `test3`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `test3` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `test` varchar(64) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  10.  
  11. --
  12. -- Zrzut danych tabeli `test3`
  13. --
  14.  
  15. INSERT INTO `test3` (`id`, `test`) VALUES
  16. (1, '8223372036854775807'),
  17. (2, '9');

Jak widać dane są takie same w dwóch tabelach. Spróbuj teraz wykonać na obu tabelach takie zapytanie:
  1. SELECT * FROM testX ORDER BY test

Jeśli nie widzisz różnicy w wynikach to przykro smile.gif
Każdy typ zmiennych w php ma swój odpowiednik w MySQL i tego się należy trzymać i nie kombinować, w końcu po coś zostało to wymyślone.
.radex
Cytat
Każdy typ zmiennych w php ma swój odpowiednik w MySQL i tego się należy trzymać i nie kombinować, w końcu po coś zostało to wymyślone.


ale nie wszystko można zrobić intem! Ja nie widzę problemu w trzymaniu liczb w stringach. Można je przecież i tak obrabiać za pomocą funkcji BC Math tudzież GMP
Crozin
Cytat
No proszę Ciebie, nie mów, że nie ma różnicy pomiędzy danymi liczbowymi a tekstowymi trzymanymi w bazie
Ale tego nigdy nigdzie nie napisałem winksmiley.jpg Oczywiście, że pomiędzy INT a VARCHAR jest różnica (są to dwa kompletnie inne typy przecież). Ale z punktu widzenia PHP przy wprowadzaniu (bo o to pytał autor) danych używa się jednego stringa. To, że przy pobieraniu danych jest już różnica to inna bajka. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.